home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / c / simplecalc / calc.supp.c < prev    next >
C/C++ Source or Header  |  2000-02-28  |  4KB  |  230 lines

  1. /* ------------------------------------------------------------------
  2.  $VER: calc.supp.c 1.01 (22.02.2000)
  3.  
  4.  support program functions
  5.  
  6.  (C) Copyright 2000 Matthew J Fletcher - All Rights Reserved.
  7.  amimjf@connectfree.co.uk - www.amimjf.connectfree.co.uk
  8.  ------------------------------------------------------------------ */
  9.  
  10. #include <dos/dos.h>
  11. #include <exec/types.h>
  12. #include <intuition/intuition.h>
  13.  
  14. #include <clib/dos_protos.h>
  15. #include <clib/exec_protos.h>
  16. #include <clib/intuition_protos.h>
  17.  
  18. #include "Calc.h"
  19.  
  20. void Shutdown(void)
  21. { /* program shutdown and garbage collector */
  22.  
  23.     CloseGraphWindow(); /* it might be left open */
  24.     CloseCalcWindow();  /* is safe cos, they only close whats open */
  25.     CloseDownScreen();
  26.     exit(0);
  27. }
  28.  
  29. /* --------------------- */
  30. /* these just return the */
  31. /* number pressed (wow)  */
  32. /* --------------------- */
  33.  
  34. int Gadget00Clicked( void )
  35. { /* routine when gadget "1" is clicked. */
  36. do_math('1'); }
  37.  
  38. int Gadget10Clicked( void )
  39. { /* routine when gadget "2" is clicked. */
  40. do_math('2'); }
  41.  
  42. int Gadget20Clicked( void )
  43. { /* routine when gadget "3" is clicked. */
  44. do_math('3'); }
  45.  
  46. int Gadget30Clicked( void )
  47. { /* routine when gadget "4" is clicked. */
  48. do_math('4'); }
  49.  
  50. int Gadget40Clicked( void )
  51. { /* routine when gadget "5" is clicked. */
  52. do_math('5'); }
  53.  
  54. int Gadget50Clicked( void )
  55. { /* routine when gadget "6" is clicked. */
  56. do_math('6'); }
  57.  
  58. int Gadget60Clicked( void )
  59. { /* routine when gadget "7" is clicked. */
  60. do_math('7'); }
  61.  
  62. int Gadget70Clicked( void )
  63. { /* routine when gadget "8" is clicked. */
  64. do_math('8'); }
  65.  
  66. int Gadget80Clicked( void )
  67. { /* routine when gadget "9" is clicked. */
  68. do_math('9'); }
  69.  
  70. int Gadget90Clicked( void )
  71. { /* routine when gadget "0" is clicked. */
  72. do_math('0'); }
  73.  
  74.  
  75. /* --------------------------- */
  76. /* here we have IDCMP handlers */
  77. /* --------------------------- */
  78.  
  79. int CalcCloseWindow( void )
  80. { /* routine for "IDCMP_CLOSEWINDOW" */
  81. return(-1); /* i want to go */
  82. }
  83.  
  84. int GraphCloseWindow( void )
  85. { /* routine for "IDCMP_CLOSEWINDOW" */
  86. return(-1); /* close me ! */
  87. }
  88.  
  89.  
  90. int CalcRawKey( void )
  91. { /* routine for "IDCMP_RAWKEY" */
  92. UWORD code = CalcMsg.Code;
  93. UWORD qual = CalcMsg.Qualifier; /* from raw key */
  94.  
  95. /* ------------------------------ */
  96. /* handling for special values    */
  97. /* checks for R/L Amiga key press */
  98. /* ------------------------------ */
  99.  
  100. // printf("qual (%d)\n",qual);
  101.  
  102. if( (qual &= IEQUALIFIER_LCOMMAND) ||
  103.     (qual &= IEQUALIFIER_RCOMMAND)
  104.   )
  105.  
  106.   { /* user pressed alt, so if we */
  107.     /* have a key we can pull menu item */
  108.  
  109.     switch (code)
  110.     {
  111.     case '?': /* about */
  112.     CalcItem0();
  113.     break;
  114.  
  115.     case 'q': /* quit */
  116.     CalcItem1();
  117.     break;
  118.  
  119.     case 'x': /* cut */
  120.     CalcItem2();
  121.     break;
  122.  
  123.     case 'c': /* copy */
  124.     CalcItem3();
  125.     break;
  126.  
  127.     case 'v': /* paste */
  128.     CalcItem4();
  129.     break;
  130.  
  131.     case 'd': /* erase */
  132.     CalcItem5(); 
  133.     break;
  134.  
  135.     case 't': /* show tape */
  136.     CalcItem6();
  137.     break;
  138.  
  139.     case 'g': /* show graph */
  140.     CalcItem7();
  141.     break;
  142.     }; /* end switch */
  143.  
  144.   } /* end amiga key press */
  145.  
  146. } /* end IDCMP_RAWKEY control */
  147.  
  148.  
  149. int CalcVanillaKey( void )
  150. { /* routine for "IDCMP_VANILLAKEY" */
  151. UWORD code = CalcMsg.Code;
  152.  
  153. /* key pressed (after keymap filter) */
  154. // printf("char %c\n",CalcMsg.Code);
  155.  
  156. /* ------------------------ */
  157. /* now we check for numbers */
  158. /* ------------------------ */
  159.  
  160.     switch (code)
  161.     {
  162.     case '0':
  163.     do_math('0');
  164.     break;
  165.     case '1':
  166.     do_math('1');
  167.     break;
  168.     case '2':
  169.     do_math('2');
  170.     break;
  171.     case '3':
  172.     do_math('3');
  173.     break;
  174.     case '4':
  175.     do_math('4');
  176.     break;
  177.     case '5':
  178.     do_math('5');
  179.     break;
  180.     case '6':
  181.     do_math('6');
  182.     break;
  183.     case '7':
  184.     do_math('7');
  185.     break;
  186.     case '8':
  187.     do_math('8');
  188.     break;
  189.     case '9':
  190.     do_math('9');
  191.     break;
  192.  
  193. /* ---------------------------- */
  194. /* then we check for operations */
  195. /* ---------------------------- */
  196.  
  197.     case '-':
  198.     do_math('-');
  199.     break;
  200.     case '+':
  201.     do_math('+');
  202.     break;
  203.     case '/':
  204.     do_math('/');
  205.     break;
  206.     case '*':
  207.     do_math('*');
  208.     break;
  209.     case '(':
  210.     do_math('(');
  211.     break;
  212.     case ')':
  213.     do_math(')');
  214.     break;
  215.     case '.':
  216.     do_math('.');
  217.     break;
  218.     case '<':
  219.     do_math('<');
  220.     break;
  221.     case '=':
  222.     do_math('=');
  223.     break;
  224.     case 13: /* carrage return ascii */
  225.     do_math('=');
  226.     };
  227.  
  228. /* end key checks */
  229. }
  230.